package com.hgkj.cloud.customer.service;

import com.hgkj.cloud.base.service.TenantOrderInfoService;
import com.hgkj.cloud.base.service.TenantPsychologicalCaseWarningService;
import com.hgkj.cloud.base.service.TenantPsychologicalCounselingService;
import com.hgkj.cloud.base.util.DataUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 公用辅助类
 */
@Service
public class CustomerService {
    @Autowired
    private TenantPsychologicalCaseWarningService tenantPsychologicalCaseWarningService;
    @Autowired
    private TenantOrderInfoService tenantOrderInfoService;
    @Autowired
    private TenantPsychologicalCounselingService counselingService;

    /**
     * 后台首页统计 - 动态预警
     * 输入参数:  beginMonth/endMonth：代表 开始/结束月份，格式yyyy-mm
     *
     * @param map
     * @return
     */
    public Map<String, Object> statDynamicWarning(Map<String, Object> map) {
        // 动态预警总人次
        long dynamicWarningCount = tenantPsychologicalCaseWarningService.getWarningListCount(map);
        // 动态预警平均处理周期
        Double averageProcessCycle = tenantPsychologicalCaseWarningService.getAverageProcessCycle(map);
        // 动态预警已处理、未处理数量、已处理占比
        Map<String, Object> statWarningStatus = tenantPsychologicalCaseWarningService.statWarningStatus(map);
        // 处理类占比
        if (statWarningStatus != null) {
            statWarningStatus.put("dealedPercent", DataUtil.getPercent(dynamicWarningCount,
                    Long.parseLong(statWarningStatus.get("dealedNum").toString())));
        }
        return new HashMap<String, Object>() {{
            put("dynamicWarningCount", dynamicWarningCount);
            put("averageProcessCycle", averageProcessCycle);
            put("statWarningStatus", statWarningStatus);
        }};
    }

    // 预约面询部分统计
    public Map<String, Object> statAppoint(Map<String, Object> map) {
        // 预约人次
        long orderTimes = tenantOrderInfoService.listAllOrderInfosCount(map);
        // 咨询统计（面询人次）
        long consultingTimes = counselingService.listPsychologicalCounselingCount(map);
        // 男女心理咨询百分比
        // 返回说明： 1）total:总数,
        //          2) maleNum:男性数量，maleRate：男性占比，
        //          3）femaleNum：女性，femaleRate：女性占比，
        //          4) otherNum：其他，otherRate：其他占比
        Map<String, Object> statGenderPsyCase = counselingService.statPsyCounselingGender(map);
        // '语音咨询'、'文字咨询'，'视频咨询'，'面询'，'其他' 百分比
        // 返回说明：1）total:总数,
        //          2) voiceNum：语音咨询数量，voiceRate：语音咨询占比
        //          3）fontNum: 文字咨询数量，fontRate：文字咨询占比
        //          4）vedioNum: 视频咨询数量，vedioRate：视频咨询占比
        //          5）faceNum: 面询数量，faceRate：面询占比
        //          6）otherNum: 其他数量，otherRate：其他占比
        Map<String, Object> statConsultingManner = counselingService.statConsultingManner(map);
        // 咨询统计-按月
        List<Map<String, Object>> statMonthConsulting = counselingService.statMonthConsulting(map);
        return new HashMap<String, Object>() {{
            // 预约人次
            put("orderTimes", orderTimes);
            // 咨询统计（面询人次）
            put("consultingTimes", consultingTimes);
            // 男女心理咨询百分比
            put("statGenderPsyCase", statGenderPsyCase);
            // '语音咨询'、'文字咨询'，'视频咨询'，'面询'，'其他' 百分比
            put("statConsultingManner", statConsultingManner);
            // 咨询统计-按月
            put("statMonthConsulting", statMonthConsulting);
        }};
    }
}
